Linux 文件的三个时间属性

        平时通常同find命令找一些文件时会用到这些参数。那么这三个参数到底有啥区别呢。

        文件的 Access time,atime 是在读取文件或者执行文件时更改的。

        文件的 Modified time,mtime 是在写入文件时随文件内容的更改而更改的。

        文件的 Change time,ctime 是在写入文件、更改所有者、权限或链接设置时随 Inode 的内容更改而更改的。

modify time(mtime)创建或更改的时间
access time (atime) 访问的时间
change time (ctime) 更改原数据(inode号,属性,权限等)的时间

        因此,更改文件的内容即会更改 mtime 和 ctime,但是文件的 ctime 可能会在 mtime 未发生任何变化时更改,如权限更改了但文件内容没有更改。

        ls(1) 命令可用来列出文件的 atime、ctime 和 mtime。

        ls -lc filename 列出文件的 ctime

        ls -lu filename 列出文件的 atime

        ls -l filename 列出文件的 mtime

1
2
3
4
5
6
7
8
ls -l filename(ls默认显示的是mtime)
-rw-rw-r-- 1 lawrance lawrance 27 Oct 5 02:09 filename
ls -l --time=ctime filename
-rwxr-xr-x 1 lawrance lawrance 27 Oct 6 02:50 filename
ls -l --time=atime filename
-rw-rw-r-- 1 lawrance lawrance 27 Oct 6 02:30 filename

        1、访问时间,每次读取文件的内容,时间就会更新。比如对这个文件运用 more、cat等命令。ls、stat命令都不会修改文件的访问时间。

        2、修改时间,修改时间是文件内容最后一次被修改时间。比如:vi后保存文件。

        3、状态改动时间。文件属性最后一次被修改的时间,通过chmod、chown命令修改一次文件属性,这个时间就会更新。

        atime不一定在访问文件之后被修改,因为:使用ext3文件系统的时候,如果在mount的时候使用了noatime参数那么就不会更新atime的信息。而这是加了 noatime 取消了, 不代表真实情況。反正, 这三个 time stamp 都放在 inode 中. 若 mtime, atime 修改, inode 就一定會改, 既然 inode 改了, 那 ctime 也就跟著要改了(理论上是这样的,但是真实情况并非如此,如果是读取文档或者执行二进制文件的时候,虽然atime会变,但ctime不变,这是系统这样设计的).